package aspectj;

/**
 * @Author 肖地洋
 * @Date 2022/5/4 15:19
 *AOP： 面向切面编程，基于动态代理的，可以使用jdk，cglib两种代理方式
 *      aop就是动态代理的规范化，把动态代理的实现步骤，方式都定义好了，
 *      让开发人员用一种统一的方式使用动态代理
 *AOP的实现：
 *         1、Spring：spring也实现了aop的规范，能做aop的工作，
 *                 spring主要在事务处理时使用aop
 *                 我们项目开发中很少使用spring的aop实现，因为spring的aop比较笨重
 *         2、aspectJ：一个开源的专门做aop的框架，spring框架中集成了aspectJ框架，通过spring就可以使用aspctJ的功能
 *                   aspectJ框架实现aop有两种方式：
 *                                             1、 使用XML的配置文件
 *                                             2、使用注解，项目开发中一般都使用注解，aspectj有五个注解
 *AsoectJ的使用：
 *             1、切面的执行时间：这个执行时间在规范中叫做Advice（通知，增强）在aspectj框架中使用注解表示：
 *                也可以使用xml配置文件中的标签
 *                @Before @AfterReturning @Around @AfterThrowing @After
 *             2、切面执行的位置：
 *
 *
 */
public class SomeServideImpl implements SomeService {

    @Override
    public String doSome(String name,int age) {

        //输出方法开始时间
//       1、 System.out.println("非业务方法，方法的执行时间："+new Date());
//       2、 ServiceUtil.doLog();
        System.out.println("doSome aspectj");
//        System.out.println("非业务方法：方法执行完毕，提交事务");

        //提交事务
        return "hello";
    }

    @Override
    public void doOther() {
        //输出方法开始时间
//        System.out.println("非业务方法，方法的执行时间："+new Date());
        System.out.println("doOther");
        //提交事务
//        System.out.println("非业务方法：方法执行完毕，提交事务");

    }
}
